import $http from './http.js'
import $api from './api.js'
import { Message } from 'element-ui'

// 读取modules下面各模块得到的api，然后归并到apiList，按照模块更好找，并且避免冲突，以后更好维护
// 注意：接口名的key重复会被覆盖
let apiList = {}
const modulesFiles = require.context('./modules', true, /\.js$/)
//把文件的对象合并
modulesFiles.keys().forEach(modulePath => {
  // set './app.js' => 'app'
  const moduleObj = modulesFiles(modulePath).default // 获取导出模块的对象
  for (let key in moduleObj) {
    if (Object.prototype.hasOwnProperty.call(apiList, key))
      console.error(
        `${modulePath}文件中存在相同的键值:${key},会覆盖前属性，请检查api`
      )
  }
  apiList = Object.assign(apiList, moduleObj)
})

function getApiByName(apiName) {
  if (!apiList[apiName]) {
    Message('api未定义')
    return
  }
  return apiList[apiName]
}

export default function fetchData(apiName, data, headers) {
  const apiObj = getApiByName(apiName)
  const url = apiObj[0] || ''
  const method = apiObj[1] ? String(apiObj[1]).toLowerCase() : 'get'
  if ($api[method] === undefined) {
    Message('请求方式不正确，请检查!')
    return
  }
  return $api[method](url, data, headers)
}